package com.gss.plugin.oauth2.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.ArrayList;
import java.util.List;

/**
 * @author DYang
 * @date 2023/7/5
 */
@Data
@ConfigurationProperties(prefix = "stars.oauth-token")
public class Oauth2Properties {

    /**
     * oauth2认证
     */
    private boolean oauth2 = true;
    /**
     * 资源
     */
    private boolean resource = true;

    /**
     * token是否自动刷新
     */
    private boolean tokenRefresh = true;
    /**
     * token自动刷新时间(s)
     */
    private Integer tokenValidityTime = 7200;
    /**
     * 刷新token有效期 3天（s）
     */
    private Integer tokenRefreshTime = 259200;
    /**
     * 授权码报错模式，jdbc、memory
     */
    private String authCodeMode = "jdbc";

    /**
     * 令牌
     */
    private String signKey = "stars-oauth2-@Jwt";
    /**
     * jwd过期时间 单位：分钟
     */
    private Integer timeout = 60;
    /**
     * token名称
     */
    private String tokenName = "Authorization";
    /**
     * token名称
     */
    private String tokenPrefix = "Bearer";
    /**
     * 资源id
     */
    private String resourceIds = "stars";
    /**
     * 过滤器匹配路径
     */
    private List<String> requestMatcher = this.requestMatcher();
    /**
     * 放行url
     */
    private List<String> authWhitelist = this.authWhitelist();
    /**
     * 开启rememberMe功能,默认开启
     */
    private boolean rememberMe = true;
    /**
     * 记住我时间(s),默认60s
     */
    private int rememberMeTime = 60;
    /**
     * token存储方式 jdbc、redis、jwt
     */
    private String storeMode;

    public void setAuthWhitelist(List<String> authWhitelist) {
        if (authWhitelist != null && authWhitelist.size() > 0) {
            this.authWhitelist.addAll(authWhitelist);
        }
    }

    /**
     * 需要过滤的路径
     * @return
     */
    private List<String> requestMatcher(){
        return new ArrayList<>();
    }

    /**
     * 需要放开的路径
     * @return
     */
    private List<String> authWhitelist() {
        List<String> list = new ArrayList<>();
        list.add("/login.html");
        list.add("/error.html");
        // 接口文档放行
        list.add("/doc.html");
        list.add("/webjars/**/*");
        list.add("/swagger-resources");
        list.add("/v2/api-docs");

        list.add("/oauth/**");  // 放行获取授权
        list.add("/oauth/token");  // 放行获取授权
        list.add("/user/register");  // 放行获取授权
        list.add("/user/sendCaptcha");  // 放行获取授权
        return list;
    }
}
